public class test {
    //移除链表中所有等于key的元素：双结点遍历，prev指针始终指向cur指向的前一个位置（注意要考虑到要删的元素就在第一个位置）
    public ListNode removeElements(ListNode head, int val) {
        //空链表
        if(head == null) {
            return null;
        }
        //双结点，cur用来遍历，prev用来指向cur的前一个结点，删除要用
        ListNode prev = head;
        ListNode cur = head.next;

        //第二个元素开始的结点删除
        while(cur != null) {
            if(cur.val == val) {
                prev.next = cur.next;
                cur = cur.next;
            } else {
                cur = cur.next;
                prev = prev.next;
            }
        }
        //特殊情况：如果第一个元素就是要删的
        if(head.val == val) {
            head = head.next;
        }
        return head;
    }
}
